﻿using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;
using Microsoft.Xna.Framework.Net;
using Microsoft.Xna.Framework.Storage;

namespace _0712502_0712504_DesignPatternGame
{
    /// <summary>
    /// Nhà máy chứa sẵn các mẫu tank của Enemy
    /// Nhà máy sẽ nhờ TankConstructor để xây dựng các tank 
    /// </summary>
    public class AutomatedTankFactory : GameEntityFactory
    {
        TankConstructor constructor = new TankConstructor();    //Người điều khiển việc  thực hiện lắp ghép các bộ phận của tank lại
        
        TankBuilder comTank1Builder = new AutomatedTank1Builder();  // Nhà máy lắp ráp Comtank 1
        TankBuilder comTank2Builder = new AutomatedTank2Builder();  // Nhà máy lắp ráp Comtank 2
        TankBuilder comTank3Builder = new AutomatedTank3Builder();  // Nhà máy lắp ráp Comtank 3
        TankBuilder comTank4Builder = new AutomatedTank4Builder();  // Nhà máy lắp ráp Comtank 4
        
       
        // Khởi tạo các mẫu xe tank
        public override  void InitPrototypes()
        {
            constructor.InitTankPartFactory();  // Khởi tạo tank body factory và tank turret factory
            
            _nprototype = 4;
            _prototypes = new VisibleGameEntity[_nprototype];

            // Construct product
            constructor.Construct(comTank1Builder);
            _prototypes[0] = comTank1Builder.GetResult();
            
            constructor.Construct(comTank2Builder);
            _prototypes[1] = comTank2Builder.GetResult();

            constructor.Construct(comTank3Builder);
            _prototypes[2] = comTank3Builder.GetResult();

            constructor.Construct(comTank3Builder);
            _prototypes[3] = comTank4Builder.GetResult();                
        }

        // Clone mẫu tank
        public override VisibleGameEntity CreateObject(int idx)
        {
            if ((idx < 0) || (idx >= _nprototype))
            {
                return null;
            }

            return _prototypes[idx].Clone();
        }
    }
}
